home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 8 / QRZ Ham Radio Callsign Database - Volume 8.iso / pc / files / sat / msat09.tgz / WDLOGDIS.C < prev    next >
Text File  |  1994-09-17  |  2KB  |  114 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <time.h>
  5. #include <ctype.h>
  6.  
  7. #include <X11/Intrinsic.h>
  8.  
  9. #include "viewlog.h"
  10. #include "wdlogdisp.h"
  11.  
  12. char writebuf[500];
  13.  
  14. int wdlogdisp(FILE *pFile)
  15. {
  16.     unsigned char *buffer1;
  17.     unsigned short *buffer2;
  18.     char buffer[100];
  19.     struct CHANNEL_INFO *channels;
  20.     struct WOD_HEADER wod_header;
  21.     double value;
  22.     int channel;
  23.     char title[40];
  24.     double a, b, c;
  25.     FILE *fp;
  26.     int i, n;
  27.  
  28.     if ((fp = fopen("tlm.cfg", "r")) == NULL)
  29.     {
  30.         fprintf(stderr, "Cannot open tlm.cfg\n");
  31.         return(1);
  32.     }
  33.  
  34.     if (fread(&wod_header, sizeof(wod_header), 1, pFile) != 1)
  35.         return(1);
  36.         
  37.     sprintf(writebuf, "Whole Orbit Data\n\nStart: %s",
  38.         ctime(&wod_header.start_time));
  39.     writetext(writebuf);
  40.  
  41.     sprintf(writebuf, "End:   %sPeriod: %d seconds\n\n",
  42.         ctime(&wod_header.end_time),
  43.         (int)wod_header.sample_period);
  44.     writetext(writebuf);
  45.  
  46.     if ((channels = (struct CHANNEL_INFO *)XtCalloc(wod_header.number_of_channels, sizeof(struct CHANNEL_INFO))) == NULL)
  47.         return(1);
  48.  
  49.     if ((buffer1 = (unsigned char *)XtCalloc(wod_header.number_of_channels, 1)) == NULL)
  50.         return(1);
  51.  
  52.     fread(buffer1, 1, wod_header.number_of_channels, pFile);
  53.  
  54.     while (fgets(buffer, 100, fp) != NULL)
  55.     {
  56.         if (*buffer == 'A')
  57.         {
  58.             sscanf(buffer, "%*c %d , %[^,], %lf , %lf , %lf , %*d ,",
  59.                 &channel, title, &a, &b, &c);
  60.  
  61.             for (i = 0; i < wod_header.number_of_channels; i++)
  62.             {
  63.                 if (buffer1[i] == channel)
  64.                 {
  65.                     sprintf(writebuf, "%2d: %s\n", channel, title);
  66.                     writetext(writebuf);
  67.  
  68.                     channels[i].channel = channel;
  69.                     channels[i].a = a;
  70.                     channels[i].b = b;
  71.                     channels[i].c = c;
  72.                 }
  73.             }
  74.         }
  75.     }
  76.  
  77.     fclose(fp);
  78.  
  79.     writetext("\n");
  80.  
  81.     for (n = 0, i = 0; i < wod_header.number_of_channels; i++)
  82.         n += sprintf(writebuf + n, " %-9d", channels[i].channel);
  83.  
  84.     strcat(writebuf, "\n");
  85.     writetext(writebuf);
  86.  
  87.     XtFree(buffer1);
  88.  
  89.     if ((buffer2 = (unsigned short *)XtCalloc(wod_header.number_of_channels, 2)) == NULL)
  90.         return(1);
  91.  
  92.     while (fread(buffer2, 2, wod_header.number_of_channels, pFile) > 0)
  93.     {
  94.         for (n = 0, i = 0; i < wod_header.number_of_channels; i++)
  95.         {
  96.             value = (double)buffer2[i];
  97.             n += sprintf(writebuf + n, "%-10.2f",
  98.                 value * value * channels[i].a +
  99.                 value * channels[i].b +
  100.                 channels[i].c);
  101.         }
  102.  
  103.         strcat(writebuf, "\n");
  104.         writetext(writebuf);
  105.     }
  106.  
  107.     XtFree((char *)buffer2);
  108.  
  109.     XtFree((char *)channels);
  110.  
  111.     return(0);
  112. }
  113.  
  114.